﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades;

namespace AccesoBD
{
    public class Roles
    {
        public static bool registrarRol(Rol rNuevo)
        {
            bool res = false;
            SqlConnection conexion = DB.Conectar();
            try
            {
                string comando = "INSERT INTO Rol (nombre, descripcion, fechaAlta) VALUES (@nombre,@descripcion,@fechaAlta)";
                SqlCommand sqlcmd = new SqlCommand(comando, conexion);
                sqlcmd.Parameters.Add(new SqlParameter("@nombre", rNuevo.Nombre));
                if (string.IsNullOrEmpty(rNuevo.Descripcion))
                    sqlcmd.Parameters.Add(new SqlParameter("@descripcion", DBNull.Value));
                else
                    sqlcmd.Parameters.Add(new SqlParameter("@descripcion", rNuevo.Descripcion));
                sqlcmd.Parameters.Add(new SqlParameter("@fechaAlta", rNuevo.FechaAlta));
                int filas = sqlcmd.ExecuteNonQuery();

                if (filas > 0)
                    res = true;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return res;
        }

        //solo trae los roles vigentes, con solos sus ids y sus nombres
        public static List<Rol> obtenerTodos()
        {
            List<Rol> list = null;
            SqlConnection conexion = DB.Conectar();
            try
            {
                string comando = "SELECT idRol, nombre, fechaBaja FROM Rol WHERE (fechaBaja IS NULL OR fechaBaja > GETDATE())";
                SqlCommand sqlcmd = new SqlCommand(comando, conexion);
                SqlDataReader dr = sqlcmd.ExecuteReader();

                Rol rol = null;
                list = new List<Rol>();
                while (dr.Read())
                {
                    rol = new Rol();
                    rol.IdRol = int.Parse(dr["idRol"].ToString());
                    rol.Nombre = dr["nombre"].ToString();

                    list.Add(rol);
                    rol = null;
                }
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return list;
        }

        public static bool modificarRol(Rol rModificado)
        {
            bool res = false;
            SqlConnection conexion = DB.Conectar();
            try
            {
                string comando = "UPDATE Rol SET nombre = @nombre, descripcion = @descripcion WHERE (idRol = @idRol)";
                SqlCommand sqlcmd = new SqlCommand(comando, conexion);
                sqlcmd.Parameters.Add(new SqlParameter("@nombre", rModificado.Nombre));
                if (string.IsNullOrEmpty(rModificado.Descripcion))
                    sqlcmd.Parameters.Add(new SqlParameter("@descripcion", DBNull.Value));
                else
                    sqlcmd.Parameters.Add(new SqlParameter("@descripcion", rModificado.Descripcion));
                sqlcmd.Parameters.Add(new SqlParameter("@idRol", rModificado.IdRol));
                int filas = sqlcmd.ExecuteNonQuery();

                if (filas > 0)
                    res = true;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return res;
        }

        public static bool darBajaRol(int idRolBaja, DateTime fechaBaja)
        {
            bool res = false;
            SqlConnection conexion = DB.Conectar();
            try
            {
                string comando = "UPDATE Rol SET fechaBaja = @fechaBaja WHERE (idRol = @idRol)";
                SqlCommand sqlcmd = new SqlCommand(comando, conexion);
                sqlcmd.Parameters.Add(new SqlParameter("@fechaBaja", fechaBaja));
                sqlcmd.Parameters.Add(new SqlParameter("@idRol", idRolBaja));
                int filas = sqlcmd.ExecuteNonQuery();

                if (filas > 0)
                    res = true;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return res;
        }

        public static Rol obtenerRol(int idRol)
        {
            Rol r = null;
            SqlConnection conexion = DB.Conectar();
            try
            {
                string comando = "SELECT idRol, nombre, descripcion, fechaAlta FROM Rol WHERE (idRol = @id)";
                SqlCommand sqlcmd = new SqlCommand(comando, conexion);
                sqlcmd.Parameters.Add(new SqlParameter("@id", idRol));
                SqlDataReader dr = sqlcmd.ExecuteReader();

                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        r = new Rol();
                        r.IdRol = int.Parse(dr["idRol"].ToString());
                        r.Nombre = dr["nombre"].ToString();
                        if (dr["descripcion"] == DBNull.Value)
                            r.Descripcion = null;
                        else
                            r.Descripcion = dr["descripcion"].ToString();
                        r.FechaAlta = DateTime.Parse(dr["fechaAlta"].ToString());
                    }
                }

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return r;
        }
    }
}
